package excercise;

import java.util.Scanner;

/**
 * 题目：https://blog.csdn.net/ATFWUS/article/details/105266576
 * @Author: Miyako
 * @Date: 2024-07-27-16:24
 * @Description: 生命游戏，刷新细胞状态
 */
public class LifeGame {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();
        int y = sc.nextInt();
        int count=0;
        int[][] A = new int[x][y];//储存x行y列的矩阵
        int[][] B = new int[x][y];//存储刷新后的状态
        //读取初始状态
        for (int i = 0;i<x;i++){
            for (int m=0;m<y;m++){
                A[i][m]=sc.nextInt();
            }
        }


       for (int i=0 ;i<x;i++){
           for (int m=0;m<y;m++){//遍历A数组
               for (int line=i-1; line<=i+1;line++){
                   for (int column=m-1;column<=m+1;column++){
                        if (line<0||line==x||column<0||column==y||column==m&&line==i){//边界检测并排除自己
                            continue;
                        }
                        count+=A[line][column];//相邻细胞存活状态累加
                   }
               }
               B[i][m]=flushState(A[i][m],count);//更新当前细胞状态
               count=0;
           }
       }
       sc.close();
       for (int K[]:B){
           for (int M:K){
               System.out.print(M);//遍历二维数组
           }
           System.out.println();
       }


    }
    /**
     * @param startState:当前细胞状态(1代表存活),(0代表死亡)
     * @param ttState:周围一圈相邻细胞的存活数量
     * @return 更新后的细胞状态
     * @description 用于刷新细胞状态的方法
     **/
    static  int  flushState(int startState,int ttState ){
        if (startState==1){//活细胞检测
            if (ttState==2||ttState==3){
                return 1;
            }
            return 0;
        }else {//死细胞检测
            if (ttState==3){
                return 1;
            }
            else {
                return 0;
            }
        }
    } 
}
